Univalle


Análisis de Series de Tiempo y Pronósticos ARIMA

Estudio Empírico sobre el Precio de Acciones de Tesla Inc.


1. Introducción

1.1 Relevancia del Análisis

[PLACEHOLDER: Explica la relevancia de Tesla, su importancia en el mercado global, volatilidad e impacto para inversionistas]

El análisis de series de tiempo en los mercados financieros es fundamental para la toma de decisiones estratégicas. Las acciones de Tesla Inc. representan un caso de estudio particularmente interesante debido a su volatilidad inherente y su impacto significativo en los mercados globales.

1.2 Metodología: Modelos ARIMA

[PLACEHOLDER: Introduce los conceptos fundamentales de ARIMA, su importancia y utilidad en pronósticos de series temporales]

Los modelos ARIMA combinan componentes autorregresivos, de integración y de media móvil para capturar dinámicas complejas en datos temporales.


2. Descripción de la Serie Temporal

2.1 Contexto Histórico

[PLACEHOLDER: Contexto de Tesla Inc., su cotización en bolsa, período de análisis seleccionado, eventos significativos que han afectado el precio]

2.2 Estadísticas Descriptivas

[PLACEHOLDER: Carga tus datos y proporciona estadísticas completas de la serie]

# Cargar datos de Tesla
datos_tesla <- read.csv("tesla_data.csv")
summary(datos_tesla$Close)
sd(datos_tesla$Close)
Estadístico Valor
Media [Inserta]
Mediana [Inserta]
Desv. Est. [Inserta]
Mínimo [Inserta]
Máximo [Inserta]

4. Resultados del Modelo ARIMA

4.1 Selección de la Ventana Temporal

4.1.1 Partición de Datos

Ventana de Entrenamiento (2022-10-07 → 2025-09-30) Ventana de Prueba (2025-10-01 → presente) Tabla resumen: observaciones por conjunto Gráfico: Serie con partición Train/Test

Entrenamiento=window(Precio, end="2025-09-30")
Prueba=window(Precio, start = "2025-10-01")
df_train <- data.frame(
  Fecha = index(Entrenamiento),
  Precio = as.numeric(Entrenamiento),
  Conjunto = "Entrenamiento"
)

df_test <- data.frame(
  Fecha = index(Prueba),
  Precio = as.numeric(Prueba),
  Conjunto = "Prueba"
)

df_completo <- bind_rows(df_train, df_test)

fecha_corte <- as.Date("2025-10-01")

ggplot(df_completo, aes(x = Fecha, y = Precio)) +
  geom_ribbon(data = df_train, 
              aes(ymin = min(df_completo$Precio) * 0.95, ymax = Precio),
              fill = qqq_pal$primary, alpha = 0.08) +
  geom_ribbon(data = df_test, 
              aes(ymin = min(df_completo$Precio) * 0.95, ymax = Precio),
              fill = qqq_pal$secondary, alpha = 0.15) +
  geom_line(data = df_train, color = qqq_pal$primary, linewidth = 0.9) +
  geom_line(data = df_test, color = qqq_pal$secondary, linewidth = 1.1) +
  geom_vline(xintercept = fecha_corte, 
             linetype = "dashed", color = qqq_pal$negative, linewidth = 0.8) +
  annotate("text", x = fecha_corte, y = max(df_completo$Precio) * 1.02,
           label = "Corte: 01-Oct-2025", hjust = -0.05, vjust = 0,
           color = qqq_pal$negative, fontface = "bold", size = 3.5) +
  annotate("label", 
           x = as.Date("2024-01-01"), 
           y = max(df_completo$Precio) * 0.85,
           label = paste0("ENTRENAMIENTO\n", nrow(df_train), " observaciones"),
           fill = qqq_pal$primary, color = "white", 
           fontface = "bold", size = 3.5, label.padding = unit(0.5, "lines")) +
  annotate("label", 
           x = max(df_test$Fecha) - 10,
           y = min(df_completo$Precio) * 1.15,
           label = paste0("PRUEBA\n", nrow(df_test), " obs."),
           fill = qqq_pal$secondary, color = "white", 
           fontface = "bold", size = 3.2, label.padding = unit(0.4, "lines")) +
  scale_x_date(date_breaks = "4 months", date_labels = "%b %Y",
               expand = expansion(mult = c(0.02, 0.05))) +
  scale_y_continuous(labels = dollar_format(prefix = "$"),
                     expand = expansion(mult = c(0.05, 0.08))) +
  labs(
    title = "Partición de Datos: Entrenamiento vs Prueba",
    subtitle = "QQQ (Nasdaq-100 ETF) | Serie de precios de cierre diarios",
    x = NULL,
    y = "Precio de Cierre (USD)",
    caption = paste0("Fuente: Yahoo Finance | Período: ", 
                     min(df_completo$Fecha), " a ", max(df_completo$Fecha))
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.background = element_rect(fill = "transparent", color = NA),
    panel.background = element_rect(fill = "transparent", color = NA),
    
    plot.title = element_text(face = "bold", size = 16, color = qqq_pal$text_dark,
                              margin = margin(b = 5)),
    plot.subtitle = element_text(size = 11, color = qqq_pal$secondary,
                                 margin = margin(b = 15)),
    plot.caption = element_text(size = 9, color = qqq_pal$text_gray,
                                margin = margin(t = 15), hjust = 0),
    
    axis.title.y = element_text(face = "bold", size = 10, color = qqq_pal$text_gray),
    axis.text = element_text(size = 9, color = qqq_pal$text_gray),
    axis.text.x = element_text(angle = 45, hjust = 1),
    
    panel.grid.major = element_line(color = qqq_pal$grid, linetype = "dashed", linewidth = 0.4),
    panel.grid.minor = element_blank(),
    
    plot.margin = margin(20, 25, 15, 15)
  )

4.1.2 Justificación de la Partición

Cumplimiento del requisito mínimo (60 períodos) Tamaño del test set para validar 10 pronósticos Proporción train/test (~95%/5%)

4.2 Análisis de Estacionariedad

El primer paso en la metodología Box-Jenkins consiste en verificar si la serie temporal es estacionaria, condición necesaria para la aplicación de modelos ARIMA.

4.2.1 Serie en Niveles (Original)

Se evaluó la estacionariedad de la serie de precios de cierre mediante dos enfoques complementarios: análisis visual de la función de autocorrelación (ACF) y la prueba formal de Dickey-Fuller Aumentada (ADF).

Análisis Visual: Función de Autocorrelación

Prueba Formal: Test de Dickey-Fuller Aumentado

[INSERTAR TABLA ADF]

[INSERTAR CONCLUSIÓN: Serie NO estacionaria]


4.2.2 Aplicación de Diferenciación

Dado que la serie en niveles no es estacionaria, se procede a aplicar diferenciación de primer orden para estabilizar la media.

[INSERTAR CÓDIGO Y GRÁFICO COMPARATIVO]


4.2.3 Verificación Post-Diferenciación

[INSERTAR GRÁFICO ACF - Serie diferenciada]

[INSERTAR TABLA ADF - Serie diferenciada]

Conclusión: Con un p-valor < 0.05, se rechaza H₀ y se confirma que la serie diferenciada ES estacionaria. Por tanto, el orden de integración es d = 1.


4.3 Identificación del Modelo

4.3.1 Análisis ACF/PACF

Con la serie diferenciada estacionaria, se analizan los correlogramas ACF y PACF para identificar los órdenes p (AR) y q (MA) del modelo.

[INSERTAR GRÁFICO DUAL ACF/PACF]

[INSERTAR TABLA DE PATRONES IDENTIFICADOS]


4.3.2 Modelos Candidatos

Basándose en el análisis visual y la función auto.arima(), se proponen los siguientes modelos candidatos:

[INSERTAR TABLA DE MODELOS CANDIDATOS]


4.4 Estimación y Comparación de Modelos

4.4.1 Ajuste de Modelos

[CÓDIGO Y RESUMEN DE CADA MODELO]


4.4.2 Criterios de Información

[INSERTAR TABLA COMPARATIVA: AIC, AICc, BIC]


4.4.3 Métricas de Precisión

[INSERTAR TABLA accuracy()]


4.5 Diagnóstico de Residuos

4.5.1 Análisis Gráfico

[INSERTAR checkresiduals() PERSONALIZADO]


4.5.2 Prueba de Ljung-Box

[INSERTAR TABLA LJUNG-BOX]

[CONCLUSIÓN: ¿Residuos son ruido blanco?]


4.6 Pronóstico y Evaluación

4.6.1 Generación de Pronósticos

[INSERTAR TABLA DE PRONÓSTICOS]

[INSERTAR GRÁFICO DE PRONÓSTICO]


4.6.2 Evaluación con Datos de Prueba

[INSERTAR GRÁFICO PREDICHO VS REAL]

[INSERTAR TABLA DE ERRORES]


4.7 Síntesis del Modelo

[TABLA RESUMEN FINAL]

5. Conclusiones

5.1 Hallazgos Principales

[PLACEHOLDER: Resumen de hallazgos principales del análisis ARIMA]

5.2 Implicaciones Prácticas

[PLACEHOLDER: Implicaciones de los pronósticos para inversionistas y analistas de mercado]

5.3 Limitaciones del Análisis

[PLACEHOLDER: Limitaciones del modelo y aspectos no capturados]

5.4 Recomendaciones Futuras

[PLACEHOLDER: Sugerencias para mejoras y extensiones del análisis]

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ASIGNATURA: Gestión de Datos
PROFESOR: Orlando Joaqui-Barandica
UNIVERSIDAD: Universidad del Valle
FACULTAD: Facultad de Ingeniería
PROGRAMA: Ingeniería Industrial
ESTUDIANTE: Camilo
FECHA ENTREGA:
VERSIÓN: 1.0
Documento generado con R Markdown | Tema: Series de Tiempo y Pronósticos ARIMA
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━